# -*- coding: utf-8 -*-
# @name             : 主要配置文件
# @author           : OneYoung
# @create           : 2024/02/04
# @version          : v1.0
# @desc             : 生产环境时，PRO需要更改为True

import os
import time

# ================================================= #
# ******************** 环境配置  ******************** #
# ================================================= #
""" 是否调试模式 """
DEBUG = True

"""引入环境配置"""
if DEBUG:
    from application.env.testing import *
else:
    from application.env.prod import *

# ================================================= #
# ******************* 数据库配置  ******************* #
# ================================================= #
DATABASE_URL = "mysql://{user}:{password}@{host}:{port}/{database}".format(**DB_CONFIG)
REDIS_DB_URL = "redis://{username}:{password}@{host}:{port}/{db}".format(**REDIS_CONFIG)

# ================================================= #
# ******************** 路径配置  ******************** #
# ================================================= #
""" 项目根目录 """
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
""" 测试数据存放路径 """
DATA_DIR = os.path.join(BASE_DIR, 'website', 'datas')
""" 测试用例存放路径 """
CASE_DIR = os.path.join(BASE_DIR, 'website', 'test_cases')
""" 测试报告存放路径 """
REPORT_DIR = os.path.join(BASE_DIR, 'report')

# ================================================= #
# ****************** 日志配置  ******************** #
# ================================================= #
LOG_OUTPUT = True  # 是否显示控制台输出
LOG_CONFIG = dict(
    encoding='utf-8',  # 日志默认编码
    rotation='5Mb'  # 日志分割,大于5M自动分割
)

# ================================================= #
# ***************** 测试报告配置  ******************* #
# ================================================= #
"""
使用unittestreport模块生成测试报告，unittestteport中封装了一个TestRunner类，
可以用来代替unittest中的TextTestRunner来执行测试用例；
1. 执行完测试用例之后会自动生成测试报告，并且有多种报告风格可选；
2. 使用TestRunner.run，运行时加上参数，即可实现用例失败重运行；
3. TestRunner类中实现了send_email方法，可以方便用户，快速发送邮件；
4. 测试结果可推送到钉钉群(dingtalk_notice方法)和企业微信群(weixin_notice方法);
参考文档：https://unittestreport.readthedocs.io/en/latest/
"""
REPORT_CONFIG = dict(
    title="UI自动化测试报告",  # 指定测试报告的标题
    tester="OneYoung",  # 测试人员名称
    filename=f"report_{time.strftime('%Y%m%d_%H%M%S')}.html",  # 指定报告文件名
    report_dir=REPORT_DIR,  # 指定存放报告路径
    desc="项目自动化测试生成报告",  # 测试报告描述
    templates=2  # 可以指定1，2，3三个风格的模板
)

"""测试用例失败重运行"""
RUNNING_CONFIG = dict(
    thread_count=1,  # 并发执行用例,指定运行用例时开启的线程数量
    count=0,  # 用来指定用例失败重运行的次数
    interval=1  # 指定每次重运行的时间间隔(s)
)

"""邮件发送测试报告"""
EMAIL_ENABLE = False  # 是否发送邮件
EMAIL_CONFIG = dict(
    host="smtp.qq.com",  # smtp服务器地址
    port=25,  # 端口,目前发送邮件只支持465和25端口
    user="727655151@qq.com",  # 邮箱账号
    password="bboocpkg****uktzbejg",  # smtp服务授权码
    to_addrs=["wangy@grgold.cn"],  # 收件人邮箱地址,单个传字符串,多个传列表
    is_file=True  # 是否发送测试报告附件
)

"""
钉钉消息通知配置
参考文档(钉钉开放平台)：https://open.dingtalk.com/document/orgapp/robot-overview
"""
DING_ENABLE = False  # 是否启用钉钉消息通知
DING_CONFIG = dict(
    url='https://oapi.dingtalk.com/robot/send?access_token=******',  # 钉钉机器人的Webhook地址
    key='',  # (非必传：str类型)如果钉钉机器人安全设置了关键字，则需要传入对应的关键字
    secret='',  # (非必传：str类型)如果钉钉机器人安全设置了签名，则需要传入对应的密钥
    atMobiles='',  # (非必传：list类型)发送通知钉钉中要@人的手机号列表，如：[137xxx,188xxx]
    isatall=False,  # 是否@所有人，默认为False,设为True则会@所有人
    except_info=True  # 是否发送未通过用例的详细信息，默认为False，设为True则会发送失败用例的详细信息
)

"""
企业微信消息通知配置
[access_token]和[corpid，corpsecret]至少要传一种
可以传入access_token,也可以传入[corpid，corpsecret]来代替access_token
参考文档(企业微信开发者中心)：https://developer.work.weixin.qq.com/resource/devtool
"""
WECHAT_ENABLE = False  # 是否启用企微消息通知
WECHAT_CONFIG = dict(
    chatid='',  # 企业微信群id
    access_token='',  # 调用企业微信API接口的凭证
    corpid='',  # 企业ID
    corpsecret=''  # 应用的凭证密钥
)

# ================================================= #
# ******************* 请求配置  ******************* #
# ================================================= #
"""是否启用无头模式(无界面操作)"""
HEADLESS = False
"""浏览器名称:Chrome/Firefox/Safari/Edge/IE"""
BROWSER_NAME = 'Edge'
"""默认请求超时时间(s)"""
TIMEOUT = 10
